package com.ruoyi.newSystem.service;


import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.PageResult;
import com.ruoyi.newSystem.bean.input.UserPageReqVO;
import com.ruoyi.newSystem.bean.input.UserUpdateReqVO;
import com.ruoyi.common.core.domain.entity.AdminUserDO;

import javax.validation.Valid;

/**
 * 后台用户 Service 接口
 *
 * @author 后台源码
 */
public interface AdminUserService {

    /**
     * 创建用户
     *
     * @param userDO 用户信息
     * @return 用户编号 long
     */
    AdminUserDO createUser(AdminUserDO userDO) throws Exception;

    /**
     * 修改用户
     *
     * @param reqVO 用户信息
     */
    void updateUser(@Valid UserUpdateReqVO reqVO);


    /**
     * 修改用户个人密码
     *
     * @param id          用户编号
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    void updateUserPassword(Long id, String oldPassword, String newPassword);


    /**
     * 通过用户名查询用户
     *
     * @param username 用户名
     * @return 用户对象信息 user by username
     */
    AdminUserDO getUserByUsername(String username);


    /**
     * 获得用户分页列表
     *
     * @param reqVO 分页条件
     * @return 分页列表 user page
     */
    PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO);

    /**
     * 通过用户 ID 查询用户
     *
     * @param id 用户ID
     * @return 用户对象信息 user
     */
    AdminUserDO getUserByUserId(Long id);


    /**
     * 通过钉钉的UnionId 获取用户
     *
     * @param unionid 钉钉unionId
     * @return 用户信息
     */
    AdminUserDO getUserByUnionid(String unionid);

    /**
     * 通过账号密码获取用户
     *
     * @param username 账号
     * @param password 密码
     * @return 用户信息
     */
    AdminUserDO getUserNameAndPassword(String username, String password);


    /**
     * 获取当前用户的所有权限并存入缓存中
     *
     * @param id 用户id
     */
    void getAllPermissionsSetCache(Long id);

    /**
     * 判断密码是否需要修改
     *
     * @return ajax
     */
    AjaxResult isPasswordUpdate();

    /**
     * 更新用户状态
     *
     * @param id     用户id
     * @param status 帐号状态
     */
    void updateUserStatus(Long id, Integer status);
}
